﻿#include <stdio.h>
#include <windows.h>
//int main()
//{
//	int a = 1;
//	if (*(char*)&a == 1)
//	{
//		printf("小端\n");
//	}
//	else
//	{
//		printf("大端\n");
//	}
//	printf("%d\n", a);
//	return 0;
//}
// 优化
//int check_sys()
//{
//	int a = 1;
//	return *(char*)&a;
//}
//int main()
//{
//	if (check_sys())
//	{
//		printf("小端\n");
//	}
//	else
//	{
//		printf("大端\n");
//	}
//	return 0;
//}
//int main()
//{
//	char a = -1;
//	signed char b = -1;
//	unsigned char c = -1;
//	printf("a=%d,b=%d,c=%d", a, b, c);//a=-1,b=-1,c=255
//	return 0;
//}
//int main()
//{
//	unsigned int num = -10;
//	printf("%d\n", num);
//	printf("%u\n", num);
//	return 0;
//}
//int main()
//{
//	char a[1000];
//	int i = 0;
//	for (i = 0; i < 1000; i++)
//	{
//		a[i] = -1 - i;
//	}
//	printf("%zd\n", strlen(a));//255
//	return 0;
//}
////死循环
// 1.
//unsigned char i = 0;//全局变量	0~255
//int main()
//{
//	for (i = 0; i <= 255; i++)
//	{
//		printf("hello world!\n");
//		Sleep(100);
//	}
//	return 0;
//}
// 2.
//int main()
//{
//	unsigned int i;
//	for (i = 7; i >= 0; i++)
//	{
//		printf("%u\n", i);
//		Sleep(100);
//	}
//	return 0;
//}
// 整型提升
// 1.
//int main()
//{
//	unsigned char a = -1;
//	//100000000 00000000 00000000 00000001原码
//	//111111111 11111111 11111111 11111110反码
//	//111111111 11111111 11111111 11111111补码
//	//							  111111111
//	//000000000 00000000 00000000 11111111整型提升
//	printf("%d\n", a);
//	printf("%u\n", a);
//	return 0;
//}
// 2.
//int main()
//{
//	char a = -128;
//	//10000000 00000000 00000000 10000000原码
//	//11111111 11111111 11111111 01111111反码
//	//11111111 11111111 11111111 10000000补码
//	//                           10000000
//	//11111111 11111111 11111111 10000000整型提升
//
//	//11111111 11111111 11111111 10000000
//	printf("%u\n", a);//4294967168	%u打印无符号整数->最高位看成0
//
//	//11111111 11111111 11111111 10000000补码
//	printf("%d\n", a);//-128	
//	return 0;
//}
// 3.
//int main()
//{
//	char a = 255;
//	//00000000 00000000 00000010 01010101
//	//01111111 11111111 11111101 10101010
//	//01111111 11111111 11111101 10101011
//	//                           10101011
//	//11111111 11111111 11111111 10101011
//	unsigned char b = -1;
//	//10000000 00000000 00000000 00000001
//	//11111111 11111111 11111111 11111110
//	//11111111 11111111 11111111 11111111
//	//                           11111111
//	//00000000 00000000 00000000 11111111
//	printf("a = %u\n", a);//4294967295
//	printf("b = %u\n", b);//255
//	return 0;
//}
//x86环境下 小端字节序
//int main()
//{
//	int a[4] = { 1,2,3,4 };
//	int* ptr1 = (int*)(&a + 1);
//	int* ptr2 = (int*)((int)a + 1);//相差一个字节
//	printf("%x,%x", ptr1[-1], *ptr2);//4	2000000
//	return 0;
//}
//浮点数在内存中存储
//任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式：
//V = (−1)^S * M ∗ 2^E
// //
//int main()
//{
//	int n = 9;
//	//00000000 00000000 00000000 00001001
//	float* pFloat = (float*)&n;
//	//0 00000000 00000000000000000001001
//	//S=0 M=1.00000000000000000001001 E=1-127 ->V=(-1)^0*1.00000000000000000001001*2^-126
//	printf("n的值为：%d\n", n);//9
//	printf("n的值为：%f\n", *pFloat);//0.000000
//
//	*pFloat = 9.0;
//	//1001.0->(-1)^0*1.001*2^3
//	// S=0 M=1.001 E=3
//	//0 10000010 00100000000000000000000
//	printf("n的值为：%d\n", n);//1091567616
//	printf("n的值为：%f\n", *pFloat);//9.000000
//	return 0;
//}